import { defineStore } from "pinia";
import { ref } from "vue";
import { getLoginUserUsingGet } from "@/api/userController";
import ACCESS_ENUM from "@/access/accessEnum";

/**
 * 用户登录信息全局状态
 */

export const userLoginUserStore = defineStore("counter", () => {
  // 使用ref创建一个响应式的数据对象，用于存储当前用户的登录信息。
  const loginUser = ref<API.LoginUserVO>({
    userName: "用户未登录",
  });
  /**
   * 更新用户的登录信息。
   * @param NewLoginUser - 新的用户登录信息对象。
   */
  function setUserLogin(NewLoginUser: API.LoginUserVO) {
    loginUser.value = NewLoginUser;
  }

  /**
   * 异步获取当前用户的登录信息，并更新loginUser的值。
   */
  async function fetchUserLogin() {
    const res = await getLoginUserUsingGet();
    // 当API返回码为0且返回了数据时，更新用户登录信息。
    if (res.data.code === 0 && res.data.data) {
      loginUser.value = res.data.data;
    } else {
      loginUser.value = {
        userRole: ACCESS_ENUM.NO_LOGIN,
        userName: "用户未登录",
      };
    }
  }
  // 返回包含用户登录信息、更新登录信息方法和获取登录信息方法的对象。
  return { loginUser, setUserLogin, fetchUserLogin };
});
